www.gusucode.com > VC++下的串行数据通信以及八个串口编程实例- > VC++下的串行数据通信以及八个串口编程实例-/第7章 智能安防报警系统/LogDlg.cpp
// LogDlg.cpp : implementation file // #include "stdafx.h" #include "Alert.h" #include "LogDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLogDlg dialog CLogDlg::CLogDlg(CWnd* pParent /*=NULL*/) : CDialog(CLogDlg::IDD, pParent) { //{{AFX_DATA_INIT(CLogDlg) m_strCj = _T(""); m_strBf = _T(""); m_strTime = _T(""); //}}AFX_DATA_INIT } void CLogDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLogDlg) DDX_Control(pDX, IDC_COMBOTIME, m_comboTime); DDX_Control(pDX, IDC_COMBOBF, m_comboBf); DDX_Control(pDX, IDC_COMBOACT, m_comboAct); DDX_Control(pDX, IDC_LIST1, m_logList); DDX_CBString(pDX, IDC_COMBOACT, m_strCj); DDX_CBString(pDX, IDC_COMBOBF, m_strBf); DDX_CBString(pDX, IDC_COMBOTIME, m_strTime); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLogDlg, CDialog) //{{AFX_MSG_MAP(CLogDlg) ON_BN_CLICKED(IDFIND, OnFind) ON_BN_CLICKED(IDDELETE, OnDelete) ON_BN_CLICKED(IDEXIT, OnExit) ON_BN_CLICKED(IDSHOWALL, OnShowall) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLogDlg message handlers BOOL CLogDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //添加表头 m_logList.InsertColumn(0,"布控名称"); m_logList.InsertColumn(1,"触发时间"); m_logList.InsertColumn(2,"处警动作"); CRect rect; m_logList.GetClientRect(&rect); m_logList.SetColumnWidth(0,rect.Width()/5); m_logList.SetColumnWidth(1,2*rect.Width()/5); m_logList.SetColumnWidth(2,2*rect.Width()/5); //打开纪录集Log _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); CString s="select * from log"; _bstr_t bs=s.AllocSysString(); CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) { //添加下拉框内容和列表控件条目 r->MoveFirst(); while(!r->adoEOF) { m_comboAct.AddString(LPTSTR(_bstr_t(r->GetCollect("cjname")))); m_comboBf.AddString(LPTSTR(_bstr_t(r->GetCollect("bfname")))); m_comboTime.AddString(LPTSTR(_bstr_t(r->GetCollect("Date")))); int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname")))); m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time"))); m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname"))); r->MoveNext(); } } r->Close(); r=NULL; int nItem=m_comboAct.AddString("全部"); m_comboAct.SetCurSel(nItem); nItem=m_comboBf.AddString("全部"); m_comboBf.SetCurSel(nItem); nItem=m_comboTime.AddString("全部"); m_comboTime.SetCurSel(nItem); /* cmbBf.ListIndex = 0 cmbTime.ListIndex = 0 cmbCj.ListIndex = 0 */ return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLogDlg::OnFind() { // TODO: Add your control notification handler code here _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); CString s= GetSql(); if(s=="") ::AfxMessageBox("筛选条件不足,请重新筛选"); m_logList.DeleteAllItems(); _bstr_t bs=s.AllocSysString(); TRY { CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) r->MoveFirst(); while(!r->adoEOF && !r->BOF) { int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname")))); m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time"))); m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname"))); r->MoveNext(); } } CATCH(CException,e) { e->ReportError(); } END_CATCH r->Close(); r=NULL; } void CLogDlg::OnDelete() { // TODO: Add your control notification handler code here int res=::AfxMessageBox("确实要根据筛选条件删除这些记录?",MB_YESNO); if(res==IDNO) return; _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); CString s= GetSql(); // if(s=="") // ; //处理 _bstr_t bs=s.AllocSysString(); TRY { CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenStatic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) r->MoveFirst(); // else // ::AfxMessageBox("根据筛选条件未选中记录"); while(!r->adoEOF && !r->BOF) { LVFINDINFO info; //从列表控件中删除 info.flags = LVFI_STRING |LVFI_PARTIAL; info.psz = _bstr_t(r->GetCollect("bfname")); int nItem = m_logList.FindItem(&info); m_logList.DeleteItem(nItem); r->Delete(adAffectCurrent); // 从数据库中删除 r->MoveNext(); } } CATCH(CException,e) { e->ReportError(); } END_CATCH r->Close(); r=NULL; } void CLogDlg::OnExit() { // TODO: Add your control notification handler code here OnOK(); } void CLogDlg::OnShowall() { // TODO: Add your control notification handler code here //清空listview准备写入新item m_logList.DeleteAllItems(); //打开纪录集Log _RecordsetPtr r; r.CreateInstance(_uuidof(Recordset)); CString s="select * from log"; _bstr_t bs=s.AllocSysString(); CAlertApp* pApp=(CAlertApp*)::AfxGetApp(); r->Open(bs,(IDispatch*)pApp->m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); if(!r->adoEOF && !r->BOF) { //添加列表控件条目 r->MoveFirst(); while(!r->adoEOF) { int nItem = m_logList.InsertItem(m_logList.GetItemCount(),LPTSTR(_bstr_t(r->GetCollect("bfname")))); m_logList.SetItemText(nItem,1,_bstr_t(r->GetCollect("date"))+_bstr_t(" ")+_bstr_t(r->GetCollect("time"))); m_logList.SetItemText(nItem,2,_bstr_t(r->GetCollect("cjname"))); r->MoveNext(); } } r->Close(); r=NULL; } CString CLogDlg::GetSql() { m_comboBf.GetWindowText(m_strBf); //记录bfname m_comboAct.GetWindowText(m_strCj); //记录cjname m_comboTime.GetWindowText(m_strTime); //记录发生的日期date if((m_strBf=="")||(m_strCj=="")||(m_strTime=="")) return ""; CString s="select * from log where"; if(m_strBf!="全部") s+=" bfname = '" + m_strBf + "'and"; if(m_strTime!="全部") s+=" date = #" + m_strTime + "# and"; if(m_strCj!="全部") s+=" cjname = '" + m_strCj + "'"; if(s.Right(1)=="d") s=s.Left(s.GetLength()-3); if(s.Right(1)=="e") s=s.Left(s.GetLength()-5); return s; }